package com.tuzhi.filestore.http;

import com.dtflys.forest.annotation.*;
import com.tuzhi.base.web.vo.AjaxResultVO;
import com.tuzhi.base.web.vo.Result;
import com.tuzhi.common.domain.ResultBO;
import com.tuzhi.vo.bill.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Address(host = "${host_bill}", port = "${port_bill}")
public interface BillApiClient {

    /**
     * 创建订单，前端调用
     *
     * @param orderVo       创建订单的信息
     * @param Authorization token
     * @return
     */
    @Post("/bill/order/newOrder")
    Result<UpFileNewOrderRetVo> newOrder(@JSONBody String orderVo, @Header("Authorization") String Authorization);

    /**
     * 创建上传文件日志，并回写模型stp_file栏位
     *
     * @param fileUpLogVo 文件上传日志记录
     * @param modelId     模型文件ID
     * @return
     */
    @Post("/bill/order/createUploadLogAndUpdateModel/{modelId}")
    Result<Long> createUploadLogAndUpdateModel(@JSONBody FileUpLogVo fileUpLogVo, @Var("modelId") Long modelId);


    //接口迁移

    //解释器，转换器

    @Get("/bill/model/updateStatus/{mid}/{status}")
    AjaxResultVO updateStatus(@Var("mid") Long mid, @Var("status") String status);

    @Get("/bill/model/{modelId}")
    AjaxResultVO getModelFile(@Var("modelId") Long modelId);


    @Put("/bill/model/update/{modelId}")
    AjaxResultVO update(@JSONBody FilesModelVo FilesModelVo, @Var("modelId") Long id);

    @Post("/bill/file/saveUpLogs")
    AjaxResultVO saveUpLogs(@JSONBody List<FileUpLogVo> list);

    @Get("/bill/model/getDownFilePath/{type}/{modelId}")
    Result<List<String>> getDownFilePath(@Var("type") String fileType, @Var("modelId") Long modelId);

    @Get("/bill/model/getDownFilePathByOrderId/{type}/{orderId}")
    Result<List<String>> getDownFilePathByOrderId(@Var("type") String fileType, @Var("orderId") Long modelId);


    @Get("/bill/file/getFilePath4FileId/{fileUpLogId}")
    Result<List<String>> getFilePath4FileUpLogId(@Var("fileUpLogId") Long fileUpLogId);


    /**
     * 创建订单，前端调用
     *
     * @param orderVo       创建订单的信息
     * @param Authorization token
     * @return
     */
    @Post("/bill/processSample/createProcessSample")
    Result<UpFileNewOrderRetVo> createProcessSample(@JSONBody String processSampleVo, @Header("Authorization") String Authorization);


    /**
     * 查出不需要移动的文件集合（测试系统）
     *
     * @param orgId
     * @return
     */
    @Get("/bill/order/listTestFile/{orgId}")
    Result<BackFileVo> listTestFile(@Var("orgId") Long orgId);


    /**
     * 查询订单系统Header表信息
     *
     * @param modelId
     * @return
     */
    @Get("/bill/order/head/{modelId}")
    Result<Map> getBillOrderHeader(@Var("modelId") Long modelId);

    /**
     * 查询订单系统Header表信息
     *
     * @param billId
     * @return
     */
    @Get("/bill/order/get/{billId}")
    Result<Map> getBillOrderHeaderById(@Var("billId") Long billId);


    /**
     * 更新客户名称，报价员
     *
     * @param updateCustomerVo 创建订单的信息
     * @return
     */
    @Post("/bill/order/updateCustomerNotCheckErp")
    ResultBO updateCustomerNotCheckErp(@JSONBody String updateCustomerVo, @Header("Authorization") String accessToken);


    @Get("/bill/user/get/{pk}")
    AjaxResultVO getUserById(@Var("pk") Long pk);

    /**
     * 自动路线发送警告邮件
     */
    @Get("/bill/docAutoCheck/sendWarmMail/{modelId}/{subject}/{content}")
    AjaxResultVO sendWarmMail(@Var("modelId") Long modelId, @Var("subject") String subject, @Var("content") String content);

    @Get(value = "/bill/docAutoCheck/docAutoCheckList/{orgId}/{status}/{startDate}/{endDate}")
    AjaxResultVO<List<DocAutoDto>> docAutoCheckList(@Var("orgId") Long orgId, @Var("status") String status, @Var("startDate") Date startDate
            , @Var("endDate") Date endDate);

    /**
     * 测试多线程
     *
     * @param userName
     * @return
     */
    @Get("/bill/order/testTL/{userName}")
    ResultBO testTL(@Var("userName") String userName, @Header("Authorization") String accessToken);

}
